﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace Repositories.Interfaces
{
	public interface IGroupMealRepository : IBaseRepository<GroupMeal>
	{
        /// <summary>
        /// Creates the GroupMeal.
        /// </summary>
        /// <param name="item">The item.</param>
        void CreateGroupMeal(GroupMeal item);

        /// <summary>
        /// Queries the GroupMeal.
        /// </summary>
        /// <param name="predicate">The predicate.</param>
        /// <returns>Query results.</returns>
        IQueryable<GroupMeal> QueryGroupMeal(Expression<Func<GroupMeal, bool>> predicate);

        /// <summary>
        /// Finds the by ID.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns>The GroupMeal with input ID.</returns>
        GroupMeal FindById(int id);

        /// <summary>
        /// Gets all GroupMeal.
        /// </summary>
        /// <returns>all GroupMeal.</returns>
        List<GroupMeal> GetAllGroupMeal();

        /// <summary>
        /// Get All Category For DropDownList
        /// </summary>
        List<Category> GetAllCategoriesForDropDownList();

        List<GroupMeal> GetAllGroupMealByCategory(int categoryId);

        /// <summary>
        /// Get All Category For DropDownList
        /// </summary>
        List<Category> GetAllCategorysForDropDownList();

        /// <summary>
        /// Edits the GroupMeal.
        /// </summary>
        /// <param name="item">The item.</param>
        void EditGroupMeal(GroupMeal item);


        /// <summary>
        /// Deletes the GroupMeal.
        /// </summary>
        /// <param name="item">The item.</param>
        void DeleteGroupMeal(GroupMeal item);

        /// <summary>
        /// Deattaches the specified GroupMeal.
        /// </summary>
        /// <param name="solicitation">The GroupMeal.</param>
        void DeattachTo(GroupMeal combo);

      
        /// <summary>
        /// Deattaches the specified category.
        /// </summary>
        /// <param name="category">The category.</param>
        void Deattach(Category category);

        /// <summary>
        /// Applies the changes to database.
        /// </summary>
        void ApplyTheChanges();

        /// <summary>
        /// Accepts all changes.
        /// </summary>
        void AcceptAllChanges();

        /// <summary>
        /// Refreshes this instance.
        /// </summary>
        void Refresh();
	}
}
